/**
 * 
 */
package com.pe.pgn.clubpgn.domain;

import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.apache.commons.lang.StringUtils;
import org.compass.annotations.Searchable;
import org.compass.annotations.SearchableId;
import org.hibernate.annotations.Type;
import org.springframework.format.annotation.DateTimeFormat;

import com.pe.pgn.clubpgn.common.CLPConstantes;

/**
 * @author Susan Inga
 *
 */

@Entity
@Table(name = "clpb_tarjeta_persona")
@Searchable
public class ClpbTarjetaPersona extends CamposAuditoria {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7684488009826641994L;
	private Long id;
    private String coCodigoTarjetaPersona;
    private ClpbClientePersona clpbClientePersona;
    private Calendar daFechaInicioVigencia;
    private Calendar daFechaFinVigencia;
    private String deObservaciones;
    private boolean stTarjetaPersona;
    private ClpdTipoTarjetaPersona clpdTipoTarjetaPersona;
    private ClpbEstacion clpbEstacion;
    private Calendar daFechaAnulacion;
 
    private String desFechaInicio;
    private String desFechaFin;
    private String deNombre;
    private String deEstacion;
    private String stStrTarjetaPersona;
    private String stStrAnulada;
    private String deTipoDocumentoPersona;
    private String coCodeNumeroDocumento;
    private String desFechaAnulacion;
    private String stEstaAsignadoEstacion;
    private String stAsignadoEstacion;
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @SearchableId
	public Long getId() {
		return id;
	}

    @Column(name = "co_codigo_tarjeta_persona", nullable = false, length = 12)
	public String getCoCodigoTarjetaPersona() {
		return coCodigoTarjetaPersona;
	}

    @ManyToOne(targetEntity = ClpbClientePersona.class)
    @JoinColumn(name="co_cliente_persona")
	public ClpbClientePersona getClpbClientePersona() {
		return clpbClientePersona;
	}

    @Column(name = "da_fecha_inicio_vigencia", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaInicioVigencia() {
		return daFechaInicioVigencia;
	}

    @Column(name = "da_fecha_fin_vigencia", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaFinVigencia() {
		return daFechaFinVigencia;
	}

    @Column(name = "de_observaciones", length = 250)
	public String getDeObservaciones() {
		return deObservaciones;
	}

	@Column(name = "st_tarjeta_persona", nullable = false)
	@Type(type = "yes_no") 
	public boolean isStTarjetaPersona() {
		return stTarjetaPersona;
	}

    @ManyToOne(targetEntity = ClpdTipoTarjetaPersona.class)
    @JoinColumn(name="co_tipo_tarjeta_persona")
	public ClpdTipoTarjetaPersona getClpdTipoTarjetaPersona() {
		return clpdTipoTarjetaPersona;
	}

    @ManyToOne(targetEntity = ClpbEstacion.class)
    @JoinColumn(name="co_estacion")
	public ClpbEstacion getClpbEstacion() {
		return clpbEstacion;
	}

	@Column(name = "co_usuario_creador", updatable = false, nullable = false, length = 30)
	public String getCoUsuarioCreador() {
		return coUsuarioCreador;
	}

    @Column(name = "da_fecha_creacion", updatable = false, nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaCreacion() {
		return daFechaCreacion;
	}

	@Column(name = "co_usuario_modificador", length = 30)
	public String getCoUsuarioModificador() {
		return coUsuarioModificador;
	}

    @Column(name = "da_fecha_modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaModificacion() {
		return daFechaModificacion;
	}    

    @Column(name = "da_fecha_anulacion")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaAnulacion() {
		return daFechaAnulacion;
	}

	public void setDaFechaAnulacion(Calendar daFechaAnulacion) {
		this.daFechaAnulacion = daFechaAnulacion;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setCoCodigoTarjetaPersona(String coCodigoTarjetaPersona) {
		this.coCodigoTarjetaPersona = coCodigoTarjetaPersona;
	}

	public void setClpbClientePersona(ClpbClientePersona clpbClientePersona) {
		this.clpbClientePersona = clpbClientePersona;
	}

	public void setDaFechaInicioVigencia(Calendar daFechaInicioVigencia) {
		this.daFechaInicioVigencia = daFechaInicioVigencia;
	}

	public void setDaFechaFinVigencia(Calendar daFechaFinVigencia) {
		this.daFechaFinVigencia = daFechaFinVigencia;
	}

	public void setDeObservaciones(String deObservaciones) {
		this.deObservaciones = deObservaciones;
	}

	public void setStTarjetaPersona(boolean stTarjetaPersona) {
		this.stTarjetaPersona = stTarjetaPersona;
	}

	public void setClpdTipoTarjetaPersona(
			ClpdTipoTarjetaPersona clpdTipoTarjetaPersona) {
		this.clpdTipoTarjetaPersona = clpdTipoTarjetaPersona;
	}

	public void setCoUsuarioCreador(String coUsuarioCreador) {
		this.coUsuarioCreador = coUsuarioCreador;
	}

	public void setDaFechaCreacion(Calendar daFechaCreacion) {
		this.daFechaCreacion = daFechaCreacion;
	}

	public void setCoUsuarioModificador(String coUsuarioModificador) {
		this.coUsuarioModificador = coUsuarioModificador;
	}

	public void setDaFechaModificacion(Calendar daFechaModificacion) {
		this.daFechaModificacion = daFechaModificacion;
	}

	public void setClpbEstacion(ClpbEstacion clpbEstacion) {
		this.clpbEstacion = clpbEstacion;
	}

	@Override
	public boolean equals(Object o) {
		return false;
	}

	@Override
	public int hashCode() {
		return 0;
	}

	@Override
	public String toString() {
		return "ClpbTarjetaPersona [clpbClientePersona=" + clpbClientePersona
				+ ", clpbEstacion=" + clpbEstacion
				+ ", clpdTipoTarjetaPersona=" + clpdTipoTarjetaPersona
				+ ", coCodigoTarjetaPersona=" + coCodigoTarjetaPersona
				+ ", daFechaFinVigencia=" + daFechaFinVigencia
				+ ", daFechaInicioVigencia=" + daFechaInicioVigencia
				+ ", deObservaciones=" + deObservaciones + ", id=" + id
				+ ", stTarjetaPersona=" + stTarjetaPersona + "]";
	}

    @Transient
	public String getDesFechaInicio() {
		return desFechaInicio;
	}

	public void setDesFechaInicio(String desFechaInicio) {
		this.desFechaInicio = desFechaInicio;
	}
	
	@Transient
	public String getDesFechaFin() {
		return desFechaFin;
	}

	public void setDesFechaFin(String desFechaFin) {
		this.desFechaFin = desFechaFin;
	}

	@Transient
	public String getDesFechaAnulacion() {
		return desFechaAnulacion;
	}

	public void setDesFechaAnulacion(String desFechaAnulacion) {
		this.desFechaAnulacion = desFechaAnulacion;
	}

	@Transient
	public String getStEstaAsignadoEstacion() {
		
		if(this.clpbEstacion != null){			
			this.stEstaAsignadoEstacion = CLPConstantes.FLAG_YES;
		}
		else{
			this.stEstaAsignadoEstacion = CLPConstantes.FLAG_NO;
		}
		return stEstaAsignadoEstacion;
	}

	public void setStEstaAsignadoEstacion(String stEstaAsignadoEstacion) {
		this.stEstaAsignadoEstacion = stEstaAsignadoEstacion;
	}

	@Transient
	public String getStAsignadoEstacion() {
		
		if(StringUtils.isNotBlank(this.deEstacion)){			
			this.stAsignadoEstacion = CLPConstantes.FLAG_YES;
		}
		else{
			this.stAsignadoEstacion = CLPConstantes.FLAG_NO;
		}
		
		return stAsignadoEstacion;
	}

	public void setStAsignadoEstacion(String stAsignadoEstacion) {
		this.stAsignadoEstacion = stAsignadoEstacion;
	}

	@Transient
	public String getDeNombre() {
		return deNombre;
	}

	public void setDeNombre(String deNombre) {
		this.deNombre = deNombre;
	}

	@Transient
	public String getDeEstacion() {
		return deEstacion;
	}

	public void setDeEstacion(String deEstacion) {
		this.deEstacion = deEstacion;
	}

	@Transient
	public String getStStrTarjetaPersona() {
		return stStrTarjetaPersona;
	}

	public void setStStrTarjetaPersona(String stStrTarjetaPersona) {
		this.stStrTarjetaPersona = stStrTarjetaPersona;
		if(stStrTarjetaPersona.equalsIgnoreCase(CLPConstantes.ST_VERDADERO))
			this.stTarjetaPersona = Boolean.TRUE;
		else
			this.stTarjetaPersona = Boolean.FALSE;	
	}

	@Transient
	public String getStStrAnulada() {
		return stStrAnulada;
	}

	public void setStStrAnulada(String stStrAnulada) {
		this.stStrAnulada = stStrAnulada;
	}

	@Transient
	public String getDeTipoDocumentoPersona() {
		return deTipoDocumentoPersona;
	}

	public void setDeTipoDocumentoPersona(String deTipoDocumentoPersona) {
		this.deTipoDocumentoPersona = deTipoDocumentoPersona;
	}

	@Transient
	public String getCoCodeNumeroDocumento() {
		return coCodeNumeroDocumento;
	}

	public void setCoCodeNumeroDocumento(String coCodeNumeroDocumento) {
		this.coCodeNumeroDocumento = coCodeNumeroDocumento;
	}
}
